interface OpenWindowOptions {
    noopener?: boolean;
    noreferrer?: boolean;
    target?: '_blank' | '_parent' | '_self' | '_top' | string;
}

/**
 * 新窗口打开URL。
 *
 * @param url - 需要打开的网址。
 * @param options - 打开窗口的选项。
 */
function openWindow(url: string, options: OpenWindowOptions = {}): void {
    // 解构并设置默认值
    const {noopener = true, noreferrer = true, target = '_blank'} = options;

    // 基于选项创建特性字符串
    const features = [noopener && 'noopener=yes', noreferrer && 'noreferrer=yes']
        .filter(Boolean)
        .join(',');

    // 打开窗口
    window.open(url, target, features);
}

/**
 * 在新窗口中打开路由。
 * @param path
 */
function openRouteInNewWindow(path: string) {
    const {hash, origin} = location;
    const fullPath = path.startsWith('/') ? path : `/${path}`;
    const url = `${origin}${hash ? '/#' : ''}${fullPath}`;
    openWindow(url, {target: '_blank'});
}

export {openRouteInNewWindow, openWindow};
